#include "stdafx.h"
#include "Logger.h"

// VS 콘솔창에 디버그 메시지 출력
namespace TED {

void Logger::Log(const TCHAR* format, va_list ap) {
	SYSTEMTIME time;
	TCHAR date[32] = { 0, };
	TCHAR msg[512] = { 0, };
	//TCHAR content[1024] = {0,};
	GetLocalTime(&time);

	_sntprintf(date, 32, _T("[%d-%d-%d %d-%d-%d]:"), time.wYear, time.wMonth, time.wDay, time.wHour, time.wMinute, time.wSecond);
	_vstprintf(msg, format, ap); // 전달된 메세지 쓰기
	//_sntprintf(content, 512,_T("%s%s"),date,msg);

//#if _DEBUG
//	string str = date;
//	str.append(msg);	
//	OutputDebugString(str.c_str());
//#endif
	/**
	 * std::wcout : 멀티바이트로 출력
	 * std::cout : 싱글바이트로 출력
	 * _tprintf를 사용하는것을 권장한다.
	 * 
	 */
	//cout <<content<<endl;
	_tprintf(_T("%s%s\n"),date,msg);
}

void Logger::Debug(const TCHAR* format, ...) {
	va_list ap;
	// list, 마지막 고정인수
	va_start(ap, format);
	Log(format, ap);
	va_end(ap);
}

void Logger::ErrorSocket(const TCHAR* format, ...) {
	va_list ap;
	TCHAR errMsg[1024] = { 0, };
	TCHAR message[2048] = { 0, };
	Util::GetMessage(WSAGetLastError(), errMsg);
	_sntprintf(message, 1024, _T("%s error=%s"), format, errMsg);

	va_start(ap, message);
	Log(message, ap);
	va_end(ap);

}

void Logger::ErrorSocket(const INT32 code, const TCHAR* format, ...) {
	va_list ap;
	TCHAR errMsg[1024] = { 0, };
	TCHAR message[2048] = { 0, };
	Util::GetMessage(code, errMsg);
	_sntprintf(message, 200, _T("%s error=%s"), format, errMsg);

	va_start(ap, message);
	Log(message, ap);
	va_end(ap);

}

}
